/**
 * 二元选择排序，在选择排序对的基础上每次内循环中找出最大的元素
 * 内循环结束后最小元素与头元素交换，最大元素与尾元素进行交换
*/

const swap = (arr, i, j) => {
  const temp = arr[i]
  arr[i] = arr[j]
  arr[j] = temp
}

const selectionSort = arr => {

  for (let i = 0; i < arr.length / 2; i++) {
    // console.log('+++++++++++++')
    let minIndex = i,
      maxIndex = i
    for (let j = i + 1; j < arr.length - i; j++) {
      // console.log('----------')
      if (arr[j] < arr[minIndex]) {
        minIndex = j
      }
      if (arr[j] > arr[maxIndex]) {
        maxIndex = j
      }
    }
    if (minIndex === maxIndex) break
    swap(arr, minIndex, i)

    if (maxIndex === i) maxIndex = minIndex
    let lastIndex = arr.length - 1 - i
    swap(arr, lastIndex, maxIndex)
    console.log(arr, '/////////')
  }
  return arr
}

console.log(selectionSort([4, 3, 1, 0, 2]))